﻿using System;
using System.Collections.Generic;
using System.Text;
using Castle.ActiveRecord;
using Atendex.Dominio;

namespace Atendex.Dominio.ActiveRecord
{
    [ActiveRecord("atendimento")]
    [Serializable]
    public class AtendimentoAR : ActiveRecordBase<AtendimentoAR>, IAtendimento
    {
        private AtendimentoAR() { }

        internal AtendimentoAR(IAtendente atendente)
        {
            this._atendente = atendente;
            Status = StatusAtendimento.Pendente;
            this._solicitacoes = new List<ISolicitacao>();
        }

        private DateTime? _dataFim;
        private IList<ISolicitacao> _solicitacoes;
        private IRequerente _requerente;
        private DateTime? _dataInicio;
        private StatusAtendimento _status;
        private IAtendente _atendente;
        private int _id;

        [PrimaryKey]
        public int Id
        {
            get { return _id; }
            set { _id = value; }
        }

        [Property]
        public DateTime? DataFim
        {
            get { return _dataFim; }
            set { _dataFim = value; }
        }
        [Property]
        public DateTime? DataInicio
        {
            get { return _dataInicio; }
            set { _dataInicio = value; }
        }
        [Property]
        public StatusAtendimento Status
        {
            get { return _status; }
            set { _status = value; }
        }

        [BelongsTo(Type = typeof(AtendenteAR), Cascade=CascadeEnum.All)]
        public IAtendente Atendente
        {
            get { return _atendente; }
            set { _atendente = value; }
        }

        [BelongsTo(Type = typeof(RequerenteAR), Cascade = CascadeEnum.All)]
        public IRequerente Requerente
        {
            get { return _requerente; }
            set { _requerente = value; }
        }
        [HasMany(typeof(SolicitacaoAR), Cascade = ManyRelationCascadeEnum.AllDeleteOrphan, Inverse = false)]
        public IList<ISolicitacao> Solicitacoes
        {
            get { return _solicitacoes; }
            private set { _solicitacoes = value; }
        }

        [Property]
        public bool Visivel { get; set; }


        public bool Valido
        {
            get
            {
                return Requerente != null && Atendente != null && Solicitacoes != null && Solicitacoes.Count > 0;

            }
        }



        #region IAtendimento Members



        #endregion

        #region IAtendimento Members


        #endregion
    }
}
